package cn.lingyangwl.agile.demo.image_combiner;

import com.freewayso.image.combiner.ImageCombiner;
import com.freewayso.image.combiner.enums.GradientDirection;
import com.freewayso.image.combiner.enums.OutputFormat;
import com.freewayso.image.combiner.enums.ZoomMode;

import java.awt.*;
import java.io.InputStream;

/**
 * @author shenguangyang
 */
public class ImageCombinerDemo {
    public static void main(String[] args) throws Exception {
        //图片元素可以是Url（支持file协议），也可以是BufferImage对象
        String bgImageUrl = "file:///d:/home/scan-template01.jpg";                  //背景图（url）
        String qrCodeUrl = "file:///d:/home/qrCode.png";                         //二维码（file协议）
//        String productImageUrl = "https://xxx.com/image/product.jpg";       //商品图
//        BufferedImage waterMark = ImageIO.read(new URL("https://xxx.com/image/waterMark.jpg")); //水印图
//        BufferedImage avatar = ImageIO.read(new File("d:/avatar.jpg"));     //头像
        String content = "16";  //内容文本

        //创建合成器（指定背景图和输出格式，整个图片的宽高和相关计算依赖于背景图，所以背景图的大小是个基准）
        ImageCombiner combiner = new ImageCombiner(bgImageUrl, 400, 600, ZoomMode.Height, OutputFormat.PNG);  //v1.1.4之后可以指定背景图新宽高了（不指定则默认用图片原宽高）

        //针对背景和整图的设置
        combiner.setCanvasRoundCorner(100); //设置整图圆角（输出格式必须为PNG）
//        combiner.setQuality(.8f);           //设置图片保存质量（0.0~1.0，Java9以下仅jpg格式有效）


        //副标题（v2.6.3版本开始支持加载项目内字体文件，可以不用在服务器安装，性能略低）
//        combiner.addTextElement("年度狂欢", "/font/yahei.ttf", 0, 150, 1450);

        // 内容（设置文本自动换行，需要指定最大宽度（超出则换行）、最大行数（超出则丢弃）、行高）
        combiner.addTextElement(content, "微软雅黑", Font.BOLD, 50, 490, 500)
//                .setSpace(.2f)                      // 字间距
                .setAutoBreakLine(837, 2, 60);      //自动换行（还有一个LineAlign参数可以指定对齐方式）

        //加入圆角矩形元素（版本>=1.2.0），作为二维码的底衬
        combiner.addRectangleElement(138, 138, 300, 300)
                .setColor(Color.WHITE)
                .setRoundCorner(50)     //该值大于等于宽高时，就是圆形，如设为300
                .setAlpha(.8f)
                .setGradient(Color.yellow,Color.blue, GradientDirection.LeftRight);  //颜色渐变

        //二维码（强制按指定宽度、高度缩放）
        combiner.addImageElement(qrCodeUrl, 138, 138, 186, 186, ZoomMode.WidthHeight);

        //执行图片合并
        combiner.combine();

        //可以获取流（并上传oss等）
        InputStream is = combiner.getCombinedImageStream();

        //也可以保存到本地
        combiner.save("/home/image.png");
    }
}
